package com.student.student.mapper;

import com.student.common.entity.Student;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 学生数据访问接口
 * 
 * @author student
 * @date 2025
 */
@Mapper
public interface StudentMapper {
    
    /**
     * 根据学号查询学生
     */
    Student findById(@Param("studentId") String studentId);
    
    /**
     * 根据姓名模糊查询学生
     */
    List<Student> findByNameLike(@Param("name") String name);
    
    /**
     * 根据专业查询学生列表
     */
    List<Student> findByMajor(@Param("major") String major);
    
    /**
     * 根据班级查询学生列表
     */
    List<Student> findByClassName(@Param("className") String className);
    
    /**
     * 根据状态查询学生列表
     */
    List<Student> findByStatus(@Param("status") String status);
    
    /**
     * 插入学生
     */
    int insert(Student student);
    
    /**
     * 更新学生信息
     */
    int update(Student student);
    
    /**
     * 删除学生
     */
    int deleteById(@Param("studentId") String studentId);
    
    /**
     * 检查学号是否存在
     */
    boolean existsById(@Param("studentId") String studentId);
    
    /**
     * 分页查询学生列表
     */
    List<Student> findByPage(@Param("name") String name, 
                            @Param("major") String major, 
                            @Param("className") String className,
                            @Param("status") String status,
                            Pageable pageable);
    
    /**
     * 统计学生数量
     */
    long countByMajor(@Param("major") String major);
    
    long countByClassName(@Param("className") String className);
}
